package interpreter;

import interpreter.service.Expression;
import interpreter.service.impl.AndExpression;
import interpreter.service.impl.OrExpression;
import interpreter.service.impl.TerminationExpression;

/**
 * todo 解释器模式（Interpreter Pattern）提供了评估语言的语法或表达式的方式，它属于行为型模式。这种模式实现了一个表达式接口，该接口解释一个特定的上下文。这种模式被用在 SQL 解析、符号处理引擎等
 * 意图：给定一个语言，定义它的文法表示，并定义一个解释器，这个解释器使用该标识来解释语言中的句子
 */
public class demo {
    //规则： rebert or john 是男性
    public static Expression getMale(){
       Expression expression = new TerminationExpression("rebert");
       Expression expression1 = new TerminationExpression("john");
       OrExpression orExpression = new OrExpression(expression, expression1);
       return orExpression;
    }
    //规则 lisa 是女性
    public static Expression getFemale(){
        Expression lisa = new TerminationExpression("lisa");
        Expression married = new TerminationExpression("married");
        AndExpression andExpression = new AndExpression(lisa, married);
        return andExpression;
    }

    public static void main(String[] args) {
        Expression male = getMale();
        Expression female = getFemale();
        System.out.println("John 是 男性吗?"+male.interpret("john"));
        System.out.println("lisa 结婚了吗?"+female.interpret("lisa married"));
    }

}
